home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 November / EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso / earcd / gfx / vtdevel3.lha / Source / CopperMagnify.s < prev    next >
Text File  |  1993-11-09  |  43KB  |  2,166 lines

  1.  
  2. rout            ;when this is off, the routine-file will be
  3.             ;assembled, on=testing
  4.             
  5. ;debug            ;when this is on, colors in the background will
  6.             ;show how much time the routine needs.
  7.  
  8. ;ntsctest        ;when this is on, the routineplayer is in ntsc-mode
  9.  
  10. routinemode    equ    1    ;the routinemode !
  11.  
  12.  
  13. ; the first part of the source handles the things that are necessary to
  14. ; show the picture/copper and playing of the routine.
  15. ; the part between the "***" lines is the routine-source.
  16. ; at the bottom of the file, there are the necessary incbin-files who
  17. ; are needed to test the routine.
  18. ; these are saved with "save effect" in videotracker. they are raw
  19. ; data files which can be fonts,pictures,landscapes,vectorobjects
  20. ; etcetra.
  21. ; the incbin-files are put in the "variables" table, in the routine-
  22. ; player-handler
  23. ; the place where it's done can be found by searching for "!!!"
  24.  
  25.  
  26.     opt    a+    ;devpac 3 optimize
  27.     opt    o+
  28.  
  29.     ifd    rout
  30.     ;videotracker routine-test
  31.  
  32.     incdir    "videotracker:include/"
  33.     include    "exec/types.i"
  34.     include    "graphics/gfxbase.i"
  35.     include    "lvo/graphics_lib.i"
  36.     incdir    'videotracker:effect/'
  37.  
  38. vew_wid    equ    44
  39. vew_hgt    equ    290
  40. win_hgt    equ    117
  41. win_str    equ    $1a
  42.  
  43.     SECTION    1,CODE_C
  44. tus
  45.     lea    var,a1
  46.     move.l    #rotsrc,curpic1        ;picture !!!
  47.  
  48.  
  49.     move.l    ($4).w,a6
  50.     sub.l    a1,a1
  51.     jsr    -$126(a6)        ;findtask
  52.     move.l    d0,curtsk
  53.     move.l    d0,a0
  54.     move.l    $b8(a0),tskpri
  55.  
  56.     lea    dosnam,a1        ;doslib openen
  57.     moveq.l    #0,d0
  58.     move.l    (4).w,a6
  59.     jsr    -408(a6)        ;openlib
  60.     move.l    d0,doslib
  61.  
  62.     bsr.s    label5            ;videotracker opstarten
  63.     
  64.     move.l    curtsk,a0
  65.     move.l    tskpri,$b8(a0)
  66.     move.l    ($4).w,a6
  67.     jsr    -$84(a6)        ;forbid
  68.  
  69.     move.l    doslib,a1
  70.     move.l    (4).w,a6
  71.     jsr    -414(a6)        ;closelib
  72.  
  73.     moveq.l    #0,d0
  74.     rts
  75.     
  76. label5
  77.     move.l    (4).w,a6        ;workbench gedoe
  78.  
  79.     move.b    530(a6),ntscmode    ;50/60 hertz halen
  80.  
  81.     ifd    ntsctest
  82.     move.b    #60,ntscmode        ;60 hertz (ntsc)
  83.     endc
  84.  
  85.     cmp.b    #50,ntscmode        ;ntsc ?
  86.     beq.s    str.ntsc
  87.     move.l    #vew_hgt-56,hogscr    ;set NTSC screen hight
  88. str.ntsc
  89.  
  90.     move.l    (4).w,a6        ;68030 cache off 
  91.     jsr    -120(a6)
  92.  
  93.     btst.b    #1,297(a6)
  94.     beq.s    str.nfc
  95.     lea.l    str.ft,a5
  96.     jsr    -30(a6)
  97. str.nfc
  98.     jsr    -126(a6)
  99.     bra.s    str.fc
  100.     
  101. str.ft
  102.     dc.w    $4e7a,2
  103.     bclr    #0,d0
  104.     bset    #13,d0
  105.     dc.w    $4e7b,2
  106.     rte
  107. str.fc
  108.  
  109.     lea    cprjmp,a2        ;copjmp zetten !
  110.     move.l    #cprbck-8,d0
  111.     move.w    d0,6(a2)
  112.     swap    d0
  113.     move.w    d0,2(a2)
  114.  
  115.     lea    cprbck-8,a2        ;copstr zetten !
  116.     move.l    #cpr,d0
  117.     move.w    d0,6(a2)
  118.     swap    d0
  119.     move.w    d0,2(a2)
  120.  
  121.     bsr    cprsprrem        ;sprites legen
  122.  
  123.     lea    gfxnam,a1        ;graphics lib openen
  124.     move.l    (4).w,a6
  125.     jsr    -408(a6)        ;openlib
  126.     move.l    d0,a6
  127.     move.l    d0,gfxlib
  128.     move.l    38(a6),oldcprlist
  129.  
  130.     bset    #1,$bfe001
  131.     bsr    copbuf            ;copper vullen
  132.  
  133.     bsr    sysoff
  134.  
  135. gadrun
  136.     btst    #6,($bfe001).l
  137.     bne    gadrun
  138.  
  139. scrend
  140. scrend.play
  141.     bsr    syson
  142.  
  143.     move.l    gfxlib,a1
  144.     move.l    (4).w,a6
  145.     jsr    -414(a6)        ;closelib
  146.  
  147. scrend.qb
  148.     moveq.l    #0,d0    
  149.     rts
  150.     
  151.     ;vertical blank interrupt, no blits.
  152.     ;handles counters,interlace,sprite
  153.     ;level 3
  154.  
  155. intvb
  156.     bra.s    intvb.cnt
  157.     dc.l    'VIDU'
  158.     dc.l    'LOOP'
  159. intvb.cnt
  160.     movem.l    d0-d7/a0-a6,-(sp)
  161.     lea    ($dff000).l,a6
  162.  
  163.     move.w    $01e(a6),d0
  164.     btst    #5,d0            ;vblank ?
  165.     bne.s    intvb.vb
  166.  
  167.     bra.s    intcop.end
  168.  
  169. intvb.vb
  170.     bsr    grap
  171.     bsr    palctr            ;palette zetten
  172.     bsr.s    copbuf            ;copper vullen
  173.     
  174. intvb.end
  175.     move.w    #$0020,$09c(a6)    ;vb bit wissen
  176.     movem.l    (sp)+,d0-d7/a0-a6    ;multitask uit, shit !
  177.     rte
  178.  
  179. intcop.end
  180.     movem.l    (sp)+,d0-d7/a0-a6
  181.     move.l    intvbold,-(sp)
  182.     rts
  183.  
  184.     ;transmission buffer empty routine, BLIT !
  185.     ;handles routines,animations
  186.     
  187. inttbe                    ;tbe interrupt
  188.     movem.l    d0-d7/a0-a6,-(sp)
  189.     lea    ($dff000).l,a6
  190.  
  191.     move.w    $01e(a6),d0
  192.     btst    #0,d0            ;no tbe ?
  193.     beq.s    intdskblk
  194.  
  195.  
  196.     btst    #6,($bfe001).l        ;muis ingedrukt ?
  197.     beq.s    inttbe.cop
  198.     btst    #2,($dff016).l
  199.     beq.s    inttbe.cop
  200.  
  201.     ifd    debug
  202.     move.w    #$700,$dff180
  203.     endc
  204.     
  205.     bsr    rotply            ;routineplayer BLIT !
  206.     bsr.s    copbuf            ;copper vullen
  207.  
  208.     ifd    debug
  209.     move.w    #$070,$dff180
  210.     endc
  211.     
  212. inttbe.cop
  213.  
  214. inttbe.end
  215.     move.w    #$0001,$09c(a6)
  216.     movem.l    (sp)+,d0-d7/a0-a6
  217.     rte
  218.  
  219. intdskblk
  220.     move.w    #$0001,$09c(a6)        ;be sure for no tbe handling
  221.     movem.l    (sp)+,d0-d7/a0-a6
  222.     move.l    inttbeold,-(sp)
  223.     rts
  224.  
  225.  
  226.     ;moves the copperbuffer to the copperlist
  227.     ;sort of double buffering
  228.     
  229. copbuf
  230.     movem.l    d0-d7/a0-a6,-(sp)
  231.  
  232.     lea    ($dff000).l,a6
  233.  
  234. copbuf.novb                ;copperchange overslaan
  235.     moveq.l    #0,d0
  236.     move.b    $005(a6),d0
  237.     lsl.w    #8,d0
  238.     moveq.l    #0,d1
  239.     move.b    $006(a6),d1
  240.     add.w    d1,d0
  241.  
  242.     cmp.w    #$4,d0
  243.     blt    copbuf.novb
  244.  
  245.     cmp.b    #50,ntscmode
  246.     beq.s    copbuf.pal
  247.     cmp.w    #$133-56-8,d0        ;ntsc grens
  248.     bge    copbuf.novb
  249.     bra.s    copbuf.cont
  250. copbuf.pal
  251.     cmp.w    #$133-8,d0        ;pal grens
  252.     bge    copbuf.novb
  253. copbuf.cont
  254.  
  255.     lea    gra.s,a0        ;buffer copieren
  256.     lea    cprbuf,a1
  257.  
  258.     move.w    00*4+2(a0),00*4+2(a1)
  259.     move.w    01*4+2(a0),01*4+2(a1)
  260.     move.w    02*4+2(a0),02*4+2(a1)
  261.     move.w    03*4+2(a0),03*4+2(a1)
  262.     move.w    04*4+2(a0),04*4+2(a1)
  263.     move.w    05*4+2(a0),05*4+2(a1)
  264.     move.w    06*4+2(a0),06*4+2(a1)
  265.     move.w    07*4+2(a0),07*4+2(a1)
  266.     move.w    08*4+2(a0),08*4+2(a1)
  267.     move.w    09*4+2(a0),09*4+2(a1)
  268.  
  269.     move.w    10*4+2(a0),10*4+2(a1)
  270.     move.w    11*4+2(a0),11*4+2(a1)
  271.     move.w    12*4+2(a0),12*4+2(a1)
  272.     move.w    13*4+2(a0),13*4+2(a1)
  273.     move.w    14*4+2(a0),14*4+2(a1)
  274.     move.w    15*4+2(a0),15*4+2(a1)
  275.     move.w    16*4+2(a0),16*4+2(a1)
  276.     move.w    17*4+2(a0),17*4+2(a1)
  277.     move.w    18*4+2(a0),18*4+2(a1)
  278.     move.w    19*4+2(a0),19*4+2(a1)
  279.  
  280.     move.w    20*4+2(a0),20*4+2(a1)
  281.     move.w    21*4+2(a0),21*4+2(a1)
  282.     move.w    22*4+2(a0),22*4+2(a1)
  283.     move.w    23*4+2(a0),23*4+2(a1)
  284.     move.w    24*4+2(a0),24*4+2(a1)
  285.     move.w    25*4+2(a0),25*4+2(a1)
  286.     move.w    26*4+2(a0),26*4+2(a1)
  287.     move.w    27*4+2(a0),27*4+2(a1)
  288.     move.w    28*4+2(a0),28*4+2(a1)
  289.     move.w    29*4+2(a0),29*4+2(a1)
  290.  
  291.     move.w    30*4+2(a0),30*4+2(a1)
  292.     move.w    31*4+2(a0),31*4+2(a1)
  293.     move.w    32*4+2(a0),32*4+2(a1)
  294.     move.w    33*4+2(a0),33*4+2(a1)
  295.     move.w    34*4+2(a0),34*4+2(a1)
  296.     move.w    35*4+2(a0),35*4+2(a1)
  297.     move.w    36*4+2(a0),36*4+2(a1)
  298.     move.w    37*4+2(a0),37*4+2(a1)
  299.     move.w    38*4+2(a0),38*4+2(a1)
  300.     move.w    39*4+2(a0),39*4+2(a1)
  301.  
  302.     move.w    40*4+2(a0),40*4+2(a1)
  303.     move.w    41*4+2(a0),41*4+2(a1)
  304.     move.w    42*4+2(a0),42*4+2(a1)
  305.     move.w    43*4+2(a0),43*4+2(a1)
  306.     move.w    44*4+2(a0),44*4+2(a1)
  307.     move.w    45*4+2(a0),45*4+2(a1)
  308.     move.w    46*4+2(a0),46*4+2(a1)
  309.     move.w    47*4+2(a0),47*4+2(a1)
  310.     move.w    48*4+2(a0),48*4+2(a1)
  311.     move.w    49*4+2(a0),49*4+2(a1)
  312.  
  313.     move.w    50*4+2(a0),50*4+2(a1)
  314.     move.w    51*4+2(a0),51*4+2(a1)
  315.     move.w    52*4+2(a0),52*4+2(a1)
  316.     move.w    53*4+2(a0),53*4+2(a1)
  317.     move.w    54*4+2(a0),54*4+2(a1)
  318.  
  319. copbuf.end
  320.     movem.l    (sp)+,d0-d7/a0-a6
  321.     rts
  322.  
  323.     ;goes back to the workbench
  324.     
  325. syson
  326.     movem.l    d0-d7/a0-a6,-(sp)
  327.  
  328.     move.w    #$0001,$dff09a        ;tbeint uit
  329.     move.l    intvbold,($6c).w
  330.     move.l    inttbeold,($64).w
  331.  
  332.     move.l    4,a6
  333.     jsr    -138(a6)        ;permit
  334.  
  335.     move.l    gfxlib,a6
  336.     jsr    -462(a6)        ;disownblitter
  337.  
  338.     move.l    wbview,a1
  339.     move.l    gfxlib,a6
  340.     jsr    _LVOLoadView(a6)     ; Fix view
  341.     jsr    _LVOWaitTOF(a6)
  342.     jsr    _LVOWaitTOF(a6)         ; wait for LoadView()
  343.  
  344. syson.ras
  345.     cmp.b    #$c0,$dff006        ;prevent copperjump
  346.     bne    syson.ras
  347.  
  348.     move.l    gfxlib,a6
  349.     move.l    gb_copinit(a6),$dff080     ; Kick it into life
  350.  
  351.     movem.l    (sp)+,d0-d7/a0-a6
  352.     rts
  353.     
  354.     ;goes back to the gadgetscreen
  355.     
  356. sysoff
  357.     movem.l    d0-d7/a0-a6,-(sp)
  358.      
  359.     move.l    gfxlib,a6
  360.     move.l    gb_ActiView(a6),wbview    ;current view
  361.     sub.l    a1,a1            ; clear a1
  362.     jsr     _LVOLoadView(a6)     ; Flush View to nothing
  363.     jsr    _LVOWaitTOF(a6)     ; Wait once
  364.     jsr    _LVOWaitTOF(a6)     ; Wait again.
  365.  
  366.     move.l    gfxlib,a6
  367.     jsr    -456(a6)        ;ownblitter
  368.  
  369.     move.l    4,a6
  370.     jsr    -132(a6)        ;forbid
  371.         
  372.     move.l    ($6c).w,intvbold
  373.     move.l    #intvb,($6c).w
  374.     move.l    ($64).w,inttbeold
  375.     move.l    #inttbe,($64).w
  376.     move.w    #$8001,$dff09a        ;tbeint aan
  377.     bsr    gracpr            ;reset copper
  378.     bsr    copbuf            ;copy copper
  379.     move.l    #cpr,$dff080
  380.  
  381.     movem.l    (sp)+,d0-d7/a0-a6
  382.     rts
  383.     
  384. cprsprrem
  385.     movem.l    d0-d7/a0-a6,-(sp)
  386.     lea    cprspr,a0
  387.     move.l    #sprdat,d0
  388.     move.w    #7,d1
  389. cprsprrem.a
  390.     move.w    d0,3*2(a0)
  391.     swap    d0
  392.     move.w    d0,1*2(a0)
  393.     swap    d0
  394.     add.l    #8,a0
  395.     dbra    d1,cprsprrem.a
  396.     movem.l    (sp)+,d0-d7/a0-a6
  397.     rts
  398.  
  399. varset                    ;variablen neerzetten
  400.     movem.l    d0-d7/a0-a6,-(sp)
  401.     move.l    #var,a0
  402.  
  403.     move.l    #cprbck,var_cprbck(a0)
  404.     move.l    gfxlib,var__GfxBase(a0)
  405.     move.b    ntscmode,var_ntsc(a0)
  406.  
  407.     move.l    curpic1,var_pic1(a0)    ;variabel
  408.     move.l    curpic2,var_pic2(a0)    ;variabel
  409.     move.w    anispd1,var_anispd1(a0)
  410.     move.w    anitel1,var_anitel1(a0)
  411.     movem.l    (sp)+,d0-d7/a0-a6
  412.     rts
  413.     
  414.     ;this routine handles all videotracker-routines
  415.  
  416. rotply    
  417.     movem.l    d0-d7/a0-a6,-(sp)
  418.  
  419.     moveq.l    #0,d0
  420.  
  421.     lea    currot1,a2        ;routine 1
  422.     move.w    rotinf1,d0        ;routine info
  423.     bsr.s    rotplyr
  424.  
  425. rotply.end
  426.     movem.l    (sp)+,d0-d7/a0-a6
  427.     rts
  428.  
  429.     ;this routine handles 1 routine, BLIT !
  430.     
  431. rotplyr
  432.     movem.l    d0-d7/a1-a6,-(sp)
  433.  
  434.     move.l    #rot,(a2)        ;routinestart address
  435.  
  436. ;    move.b    #50,ntscmode        ;ntsc/pal hz
  437.     clr.l    curpic2            ;background picture
  438.     move.w    #1,anispd1        ;animationspeed
  439.     clr.w    anitel1            ;animation position
  440.  
  441.     lea    var,a0            ;communication-table
  442.  
  443.     move.l    #routinemode,d0        ;routinemode !!!
  444.  
  445.     sub.l    a0,a0            ;picture info legen
  446.  
  447.     tst.l    (a2)            ;is er een routine ?
  448.     beq    rotplyr.end        ;interlace handling
  449.  
  450.     move.l    intdel,d2        ;delay
  451.     move.l    inttel,d1        ;teller
  452.     cmp.w    d2,d1
  453.     blt    rotplyr.end
  454.     clr.l    inttel
  455.                 
  456.     bsr    varset            ;variabelen updaten
  457.  
  458.     move.l    (a2),a1            ;routine halen
  459.     move.l    #var,a0            ;variablen tabel
  460.  
  461.     movem.l    d3-d7/a1-a6,-(sp)
  462.     moveq.l    #0,d1            ;vars wissen
  463.     moveq.l    #0,d2
  464.     moveq.l    #0,d3
  465.     moveq.l    #0,d4
  466.     moveq.l    #0,d5
  467.     moveq.l    #0,d6
  468.     moveq.l    #0,d7
  469.     sub.l    a2,a2
  470.     sub.l    a3,a3
  471.     sub.l    a4,a4
  472.     sub.l    a5,a5
  473.  
  474.     jsr    4(a1)            ;routine afwerken
  475.     movem.l    (sp)+,d3-d7/a1-a6
  476.  
  477.     ;Routine:
  478.     ;
  479.     ;Input:
  480.     ;a0=variabelentabel
  481.     ;d0=routinemode
  482.     ;
  483.     ;Output:
  484.     ;a0=picture
  485.     ;d1=copperlist
  486.     ;d2=interruptdelay        (NOT used till now)
  487.     
  488.     move.w    #$0020,$dff09a        ;vb off !
  489.  
  490.     move.l    d2,intdel        ;delay
  491.  
  492.     lea    cprjmp,a3
  493.     move.l    #cprbck-8,d0
  494.  
  495.     cmp.l    (a2),a1            ;routine ondertussen gewipt ?
  496.     bne.s    rotplyr.nocop
  497.     tst.l    d1            ;copperlist ?
  498.     beq.s    rotplyr.nocop
  499.     move.l    d1,d0
  500. rotplyr.nocop
  501.     move.w    d0,6(a3)
  502.     swap    d0
  503.     move.w    d0,2(a3)
  504.  
  505.     cmp.l    #0,a0            ;picture ?
  506.     beq.s    rotplyr.endvb
  507.  
  508.     move.l    a0,curpic1        ;current picture (cycle)
  509.     move.l    a0,curpal1        ;current palette
  510.  
  511.     tst.b    rotdpl            ;plane is geleverd
  512.     beq.s    rotplyr.set
  513.     clr.b    rotdpl
  514.     clr.l    cycdel1            ;cycle info wissen
  515.     clr.l    4+cycdel1
  516.     clr.l    curfrm1            ;curfrm1, altijd planes zetten
  517. rotplyr.set
  518.     clr.b    dplctr
  519.     bsr.s    grap
  520.     bsr    grac            ;colorset
  521. rotplyr.endvb
  522.     move.w    #$8020,$dff09a
  523. rotplyr.end
  524.     movem.l    (sp)+,d0-d7/a1-a6
  525.     rts
  526.  
  527.     ;removes possible routine-coppers
  528.     
  529. gracpr
  530.     movem.l    d0-d7/a0-a6,-(sp)
  531.     lea    cprjmp,a3
  532.     move.l    #cprbck-8,d0        ;copperlist resetten
  533.     move.w    d0,6(a3)
  534.     swap    d0
  535.     move.w    d0,2(a3)
  536.     movem.l    (sp)+,d0-d7/a0-a6
  537.     rts
  538.  
  539.     ;picture-to-copper routine, communicates with the
  540.     ;anim-player
  541.     
  542. grap                    ;d7=anim
  543.     movem.l    d0-d7/a0-a6,-(sp)
  544.  
  545.     clr.l    d7
  546.     
  547.     tst.l    curpic1            ;current picture ?
  548.     beq    grap.end
  549.  
  550.     move.l    curpic1,a2        ;normal pic halen
  551.  
  552.     lea    gracprscr,a1        ;window neerzetten
  553.     move.l    hogscr,d1
  554.  
  555.     move.w    pic_hgt(a2),d3        ;pic hoogte
  556.     move.w    pic_vew(a2),d5
  557.     btst    #2,d5            ;interlace ?
  558.     beq.s    grap.nohi4
  559.     lsr.w    #1,d3            ;/2
  560. grap.nohi4
  561.     cmp.w    d3,d1
  562.     bge.s    grap.hog
  563.     move.w    d1,d3
  564. grap.hog
  565.     sub.w    d3,d1
  566.     lsr.w    #1,d1
  567.     add.w    #win_str,d1
  568.     move.w    d1,d2
  569.     add.w    d3,d2
  570.  
  571.  
  572.     move.b    d1,2(a1)        ;y start
  573.     move.b    d2,6(a1)        ;y end
  574.  
  575.     move.w    pic_wid(a2),d4        ;pic breedte in bytes
  576.     lsl.l    #3,d4            ;make pixels
  577.  
  578.     move.l    #vew_wid*8,d0
  579.     move.l    #0,d1
  580.     move.l    #$71,d6
  581.  
  582.     move.w    pic_vew(a2),d5
  583.     btst    #15,d5            ;hires ?
  584.     beq.s    grap.nohi2
  585.  
  586.     move.l    #(vew_wid-4)*8*2,d0
  587.     move.l    #1,d1
  588.     move.l    #$81,d6
  589.  
  590.     cmp.w    #80,pic_wid(a2)        ;overscan ?
  591.     ble.s    grap.nohi2
  592.     move.l    #(vew_wid)*8*2,d0
  593.     move.l    #$61,d6
  594.  
  595. grap.nohi2    
  596.     btst    #6,d5            ;super hires ?
  597.     beq.s    grap.noshi2
  598.  
  599.     move.l    #(vew_wid-4)*8*4,d0
  600.     move.l    #2,d1
  601.     move.l    #$81,d6
  602.  
  603.     cmp.w    #80*2,pic_wid(a2)    ;overscan ?
  604.     ble.s    grap.noshi2
  605.     move.l    #(vew_wid)*8*4,d0
  606.     move.l    #$61,d6
  607.  
  608. grap.noshi2    
  609.  
  610.     clr.w    d5
  611.     cmp.w    d0,d4            ;breeder dan scherm ?
  612.     ble.s    grap.c
  613.     move.w    d4,d5
  614.     move.w    d0,d4
  615.     sub.w    d0,d5            ;modulo
  616.     lsr.w    #3,d5            ;/8
  617. grap.c
  618.     lsr.w    d1,d0
  619.     lsr.w    d1,d4
  620.  
  621.     move.w    d0,d2
  622.     sub.w    d4,d2
  623.     lsr.w    #1,d2            ;/2
  624.  
  625.     add.w    d6,d2
  626.     move.b    d2,3(a1)        ;x start
  627.     move.w    d2,d3            ;d3 bewaren !
  628.  
  629.     add.w    d4,d2            ;d4 bewaren !
  630.     move.b    d2,7(a1)        ;x end
  631.     
  632.     move.w    pic_vew(a2),d6
  633.     btst    #15,d6            ;hires ?
  634.     beq.s    grap.nohi5    
  635.     add.l    d4,d4            ;*2
  636. grap.nohi5
  637.     btst    #6,d6            ;super hires ?
  638.     beq.s    grap.noshi5    
  639.     add.l    d4,d4            ;*4
  640. grap.noshi5
  641.  
  642.     move.l    d7,-(sp)
  643.     move.w    pic_vew(a2),d6
  644.     move.l    #17,d0
  645.     move.l    #1,d1
  646.     move.l    #3,d7
  647.  
  648.     btst    #15,d6            ;hires ?
  649.     beq.s    grap.nohi3    
  650.     move.l    #9,d0
  651.     move.l    #2,d1
  652.     move.l    #2,d7
  653. grap.nohi3
  654.     btst    #6,d6            ;super hires ?
  655.     beq.s    grap.noshi3    
  656.     move.l    #9,d0
  657.     move.l    #2,d1
  658.     move.l    #1,d7
  659. grap.noshi3
  660.     sub.w    d0,d3
  661.     lsr.w    #1,d3
  662.     move.w    d3,10(a1)        ;ddfstrt
  663.     
  664.     move.w    d4,d2            ;pic breedte in pixels
  665.     lsr.w    #4,d2            ;/16
  666.     sub.w    d1,d2            ;-1
  667.  
  668.     lsl.w    d7,d2            ;*8
  669.     add.w    d2,d3
  670.     move.w    d3,14(a1)        ;ddfstop
  671.     move.l    (sp)+,d7
  672.     
  673.     lea    pic_raw(a2),a0
  674.  
  675.     moveq.l    #0,d2
  676.     move.w    pic_dpt(a2),d2
  677.     sub.l    #1,d2
  678.     muls    pic_wid(a2),d2
  679.     add.w    d2,d5
  680.  
  681.     move.w    pic_vew(a2),d2        ;viewmode add
  682.     btst    #2,d2
  683.     beq.s    grap.nolace4
  684.  
  685.     moveq.l    #0,d2
  686.     move.w    pic_dpt(a2),d2
  687.     muls    pic_wid(a2),d2
  688.     add.w    d2,d5            ;interlace gedoe
  689. grap.nolace4
  690.  
  691.     lea    gracprbpl,a4        ;iffpln neerzetten
  692.     lea    gracprpln,a0        ;iffpln neerzetten
  693.     moveq.l    #0,d2
  694.     move.w    pic_dpt(a2),d2        ;plnnummer 1 halen
  695.     move.l    #8,d6            ;copper step !
  696.  
  697.     tst.l    curpic2            ;2de picture ?
  698.     bne.s    grap.pic2
  699. grap.nopic2
  700.     move.w    d5,34(a1)        ;modulo oneven zetten
  701.     bra    grap.nodpl
  702. grap.pic2
  703.     move.l    curpic2,a3        ;oneven plane
  704.     move.l    currot2,a5        ;oneven plane
  705.     clr.l    curpic2            ;mischien niet goed
  706.     clr.l    curpal2            ;mischien niet goed
  707.     clr.l    currot2            ;mischien niet goed
  708.  
  709.     cmp.l    curpic1,a3        ;picture hetzelfde ?
  710.     beq    grap.nopic2
  711.     
  712.     cmp.l    #0,currot1        ;routine ?    
  713.     beq.s    grap.norot
  714.     cmp.l    currot1,a5        ;routine hetzelfde ?
  715.     beq    grap.nopic2
  716. grap.norot
  717.  
  718.     cmp.b    #3,d2            ;> 8 kleuren ?
  719.     bgt    grap.nopic2
  720.     move.w    pic_dpt(a3),d3        ;plnnummer 2 halen
  721.     cmp.b    d2,d3            ;gelijke plnummers ?
  722.     bne    grap.nopic2
  723.     move.w    pic_vew(a2),d1
  724.     cmp.w    pic_vew(a3),d1        ;view gelijk ?
  725.     bne    grap.nopic2
  726.  
  727.     move.w    pic_vew(a2),d1        ;groter dan view test
  728.     btst    #6,d1            ;super hires ?
  729.     beq.s    grap.nohi2a
  730.     move.l    #vew_wid*4,d1
  731.     bra.s    grap.nohi2b
  732. grap.nohi2a
  733.     btst    #15,d1            ;hires ?
  734.     beq.s    grap.noshi2a
  735.     move.l    #vew_wid*2,d1
  736.     bra.s    grap.nohi2b
  737. grap.noshi2a
  738.     move.l    #vew_wid,d1
  739. grap.nohi2b
  740.     cmp.w    pic_wid(a2),d1        ;breder dan view ?
  741.     bgt.s    grap.small
  742.     cmp.w    pic_wid(a3),d1        ;breder dan view ?
  743.     bgt.s    grap.small
  744.  
  745.     move.w    pic_vew(a2),d1
  746.     btst    #2,d1
  747.     beq.s    grap.nolace8a
  748.     move.l    hogscr,d1
  749.     add.l    d1,d1
  750.     bra.s    grap.nolace8b
  751. grap.nolace8a
  752.     move.l    hogscr,d1
  753. grap.nolace8b
  754.     cmp.w    pic_hgt(a2),d1        ;hoger dan view ?
  755.     bgt.s    grap.small
  756.     cmp.w    pic_hgt(a3),d1        ;hoger dan view ?
  757.     bgt.s    grap.small
  758.     bra.s    grap.big
  759.  
  760. grap.small
  761.     move.w    pic_hgt(a2),d1        ;wid+hgt<vew
  762.     cmp.w    pic_hgt(a3),d1        ;hoogte gelijk ?
  763.     bne    grap.nopic2
  764.     move.w    pic_wid(a2),d1
  765.     cmp.w    pic_wid(a3),d1        ;breedte gelijk ?
  766.     bne    grap.nopic2
  767.  
  768. grap.big
  769.     move.l    a3,curpic2
  770.     move.l    a3,curpal2
  771.     move.l    a5,currot2
  772.  
  773.     tst.b    dplctr            ;double playfield al gezet ?
  774.     beq.s    grap.nocop
  775.  
  776.     move.w    30(a1),34(a1)        ;modulo copieren
  777.  
  778.     move.w    2(a4),d1        ;bplcon0
  779.     btst    #10,d1            ;al double playfield ?
  780.     beq.s    grap.ta
  781.  
  782.     move.w    2(a0),10(a0)        ;plane 0>1 copieren
  783.     move.w    6(a0),14(a0)
  784.  
  785.     move.w    18(a0),26(a0)        ;plane 2>3 copieren
  786.     move.w    22(a0),30(a0)
  787.  
  788.     move.w    34(a0),42(a0)        ;plane 4>5 copieren
  789.     move.w    38(a0),46(a0)
  790.  
  791.     bra.s    grap.tb
  792. grap.ta
  793.     move.w    18(a0),42(a0)        ;plane 2>5 copieren
  794.     move.w    22(a0),46(a0)
  795.  
  796.     move.w    10(a0),26(a0)        ;plane 1>3 copieren
  797.     move.w    14(a0),30(a0)
  798.  
  799.     move.w    2(a0),10(a0)        ;plane 0>1 copieren
  800.     move.w    6(a0),14(a0)
  801.  
  802. grap.tb
  803.     move.l    #palette,a3        ;palette copieren
  804.  
  805.     move.w    #8-1,d1
  806. grap.pal
  807.     move.w    (a3)+,14(a3)
  808.     dbra    d1,grap.pal
  809.  
  810. grap.nocop
  811.     add.w    d3,d2
  812.     lsl.w    #8,d2
  813.     lsl.w    #4,d2
  814.     or.w    #$400,d2
  815.     move.w    d2,2(a4)        ;bplcon0
  816.  
  817.     movem.l    d0-d7/a0-a6,-(sp)
  818.  
  819.     move.l    curpic,a2        ;animpic ?
  820.     move.l    curfrm,d7
  821.     cmp.l    #0,a2
  822.     bne.s    grap.noanipic
  823.  
  824.     move.l    curpic2,a2        ;normal pic ?
  825.     move.l    curfrm2,d7
  826.     cmp.l    #0,a2
  827.     beq.s    grap.nodplpic
  828.  
  829. grap.noanipic
  830.     add.l    d6,a0
  831.     add.w    d6,d6
  832.     bsr.s    grappln            ;a2,d6,d7,d0
  833. grap.nodplpic
  834.     movem.l    (sp)+,d0-d7/a0-a6
  835.     add.w    d6,d6
  836.     bra.s    grap.nodpla
  837.  
  838.  
  839. grap.nodpl                ;geen double playfield
  840.     lsl.w    #8,d2
  841.     lsl.w    #4,d2
  842.     move.w    d2,2(a4)        ;bplcon0
  843.  
  844. grap.nodpla
  845.     move.w    d5,30(a1)        ;modulo even
  846.  
  847.     moveq.l    #0,d3
  848.     add.w    pic_vew(a2),d3        ;viewmode add
  849.     moveq.l    #0,d2
  850.     move.w    2(a4),d2
  851.     or.l    d3,d2
  852.     or.l    #$300,d2        ;genlock info
  853.     move.w    d2,2(a4)
  854.     
  855.     bsr.s    grappln            ;a2,d6,d7,d0
  856.  
  857. grap.end
  858.     
  859.     movem.l    (sp)+,d0-d7/a0-a6
  860.     rts
  861.         
  862.  
  863.     ;sets on of the 2 possible pictures to the copper
  864.     ;handles interlace
  865.  
  866.     ;d7=framenummer
  867.     ;d6=copperliststap
  868.     ;d0=raw planes positie
  869.     ;a2=current picture
  870. grappln                    ;planes invullen 
  871.     movem.l    d0-d7/a0-a6,-(sp)
  872.  
  873.     lea    pic_raw(a2),a1
  874.     move.l    a1,d0            ;raw planes
  875.     
  876.     moveq.l    #0,d2            ;x*y
  877.     move.w    pic_wid(a2),d2
  878.     lsr.l    #1,d2            ;/2
  879.     moveq.l    #0,d3
  880.     move.w    pic_hgt(a2),d3
  881.     muls    d3,d2
  882.     
  883.     move.l    d2,d4
  884.     add.l    d2,d2
  885.  
  886.     move.w    pic_dpt(a2),d3
  887.     muls    d3,d4            ;hele picture size
  888.     muls    d7,d4            ;frame*size d7 !
  889.  
  890.     add.l    d4,d4
  891.  
  892.     add.l    d4,d0
  893.  
  894.     move.l    #vew_wid,d5        ;max x view
  895.     move.l    hogscr,d4        ;max y view
  896.     move.w    pic_vew(a2),d1        ;viewmode add
  897.     btst    #2,d1
  898.     beq.s    grappln.nolace
  899.     add.l    d4,d4            ;max y view
  900. grappln.nolace
  901.     btst    #15,d1            ;hires ?
  902.     beq.s    grappln.nohi
  903.     move.l    #vew_wid*2,d5        ;max x view
  904. grappln.nohi
  905.     btst    #6,d1            ;super hires ?
  906.     beq.s    grappln.noshi
  907.     move.l    #vew_wid*4,d5        ;max x view
  908. grappln.noshi
  909.  
  910.     moveq.l    #0,d3            ;scherm centreren
  911.     move.w    pic_wid(a2),d3        ;pic breedte in bytes
  912.     cmp.w    d5,d3            ;breder dan scherm ?
  913.     ble.s    grappln.qa
  914.     sub.w    d5,d3            ;-scherm breedte
  915.     lsr.w    #2,d3            ;/4
  916.  
  917.     add.l    d3,d3
  918.  
  919.     add.l    d3,d0
  920. grappln.qa
  921.     move.w    pic_hgt(a2),d3        ;pic hoogte in bytes
  922.     cmp.w    d4,d3            ;hoger dan scherm ?
  923.     ble.s    grappln.qb
  924.     sub.w    d4,d3            ;-scherm breedte
  925.     lsr.w    #1,d3            ;/2
  926.     moveq.l    #0,d5
  927.     move.w    pic_wid(a2),d5        ;pic breedte in bytes
  928.     muls    pic_dpt(a2),d5
  929.     muls    d5,d3
  930.     add.l    d3,d0
  931. grappln.qb
  932.     moveq.l    #0,d2
  933.     move.w    pic_wid(a2),d2
  934.  
  935.     move.w    pic_vew(a2),d5        ;interlace flipping ?
  936.     btst    #2,d5
  937.     beq.s    grappln.nolac7b
  938.  
  939.     move.w    $04(a6),d5        ;even/oneven ?
  940.     btst    #15,d5
  941.     beq.s    grappln.nolac7b
  942.     
  943.     moveq.l    #0,d3
  944.     move.w    pic_wid(a2),d3
  945.     muls    pic_dpt(a2),d3
  946.     add.l    d3,d0
  947. grappln.nolac7b
  948.  
  949.     move.w    pic_dpt(a2),d1        ;plnnummer 1 halen
  950.     tst.w    d1            ;0 planes ?
  951.     beq.s    grappln.end
  952.     sub.w    #1,d1
  953. grappln.a
  954.     move.w    d0,3*2(a0)
  955.     swap    d0
  956.     move.w    d0,1*2(a0)
  957.     swap    d0
  958.     add.l    d6,a0            ;d6=copper step !
  959.     add.l    d2,d0
  960.     dbra    d1,grappln.a
  961. grappln.end
  962.     movem.l    (sp)+,d0-d7/a0-a6
  963.     rts
  964.  
  965.     ;sets palettes to copper
  966.     
  967. grac
  968.     movem.l    d0-d7/a0-a6,-(sp)
  969.  
  970.     lea    curpal1,a3        ;palette 1
  971.     move.l    #palette,a1
  972.     bsr.s    gracfrm
  973.  
  974.     lea    curpal2,a3        ;palette 2 (dpl)
  975.     move.l    #8*2+palette,a1
  976.     bsr.s    gracfrm
  977.     
  978.     bsr.s    palctr            ;palette-buffer to copper
  979. grac.end
  980.     movem.l    (sp)+,d0-d7/a0-a6
  981.     rts
  982.         
  983.     ;moves palette from picture to palette-buffer
  984.  
  985. gracfrm
  986.     movem.l    d0-d7/a0-a6,-(sp)
  987.     tst.l    (a3)            ;palette aanwezig ?
  988.     beq.s    gracfrm.end
  989.  
  990.     move.l    (a3),a2            ;current palette
  991.     
  992.     cmp.l    #'PALE',(a2)        ;palette ?
  993.     bne.s    gracfrm.pict
  994.     lea    6(a2),a0        ;palette
  995.     move.w    4(a2),d0        ;aantal kleuren
  996.     bra.s    gracfrm.col
  997. gracfrm.pict
  998.     cmp.l    #'ANIM',(a2)        ;animatie ?
  999.     bne.s    gracfrm.noanim
  1000.  
  1001.     moveq.l    #0,d1
  1002.     move.w    pic_ani(a2),d1
  1003.     bclr    #7,d1            ;behandelbit weghalen
  1004.  
  1005.     moveq.l    #0,d3
  1006.     move.w    pic_wid(a2),d3
  1007.     lsr.w    #1,d3            ;/2
  1008.     muls    pic_hgt(a2),d3
  1009.     muls    pic_dpt(a2),d3
  1010.  
  1011.     add.l    d3,d3
  1012.  
  1013.     add.l    #pic_raw,d3
  1014.     move.l    d3,d5
  1015.  
  1016.     btst    #0,d1
  1017.     bne.s    gracfrm.buf2
  1018.     moveq.l    #0,d5
  1019. gracfrm.buf2
  1020.     add.l    d5,a2
  1021. gracfrm.noanim
  1022.     lea    pic_pal(a2),a0        ;palette
  1023.     move.w    pic_palnum(a2),d0
  1024.  
  1025.     cmp.w    #32-1,d0        ;niet meer dan 32 kleuren
  1026.     ble    gracfrm.sub
  1027.     move.w    #32-1,d0
  1028. gracfrm.sub
  1029.  
  1030.     tst.w    d0            ;0 planes ?
  1031.     beq.s    gracfrm.end
  1032. gracfrm.col
  1033. gracfrm.fa
  1034.     move.w    (a0)+,(a1)+
  1035.     dbra    d0,gracfrm.fa
  1036. gracfrm.end
  1037.     movem.l    (sp)+,d0-d7/a0-a6
  1038.     rts
  1039.     
  1040.     ;handles colorcycling in the palette-buffer
  1041.     ;and copies palette-buffer to copper
  1042.  
  1043. palctr
  1044.     movem.l    d0-d7/a0-a6,-(sp)
  1045.  
  1046.     move.l    curpic1,a2        ;current raw
  1047.     cmp.l    #0,a2
  1048.     beq.s    palctr.qb
  1049.     lea    cycdel1,a3        ;cycle delays
  1050.     move.l    #palette,a4
  1051.     bsr    palcyc
  1052. palctr.qb
  1053.     move.l    curpic2,a2        ;current raw
  1054.     cmp.l    #0,a2
  1055.     beq.s    palctr.c
  1056.     lea    cycdel2,a3        ;cycle delays
  1057.     move.l    #8*2+palette,a4
  1058.     bsr    palcyc
  1059.  
  1060. palctr.c
  1061.     lea    gracprcol,a1
  1062.     move.l    #palette,a0
  1063.  
  1064.     move.w    00(a0),00*4+2(a1)
  1065.     move.w    02(a0),01*4+2(a1)
  1066.     move.w    04(a0),02*4+2(a1)
  1067.     move.w    06(a0),03*4+2(a1)
  1068.     move.w    08(a0),04*4+2(a1)
  1069.     move.w    10(a0),05*4+2(a1)
  1070.     move.w    12(a0),06*4+2(a1)
  1071.     move.w    14(a0),07*4+2(a1)
  1072.     move.w    16(a0),08*4+2(a1)
  1073.     move.w    18(a0),09*4+2(a1)
  1074.  
  1075.     move.w    20(a0),10*4+2(a1)
  1076.     move.w    22(a0),11*4+2(a1)
  1077.     move.w    24(a0),12*4+2(a1)
  1078.     move.w    26(a0),13*4+2(a1)
  1079.     move.w    28(a0),14*4+2(a1)
  1080.     move.w    30(a0),15*4+2(a1)
  1081.     move.w    32(a0),16*4+2(a1)
  1082.     move.w    34(a0),17*4+2(a1)
  1083.     move.w    36(a0),18*4+2(a1)
  1084.     move.w    38(a0),19*4+2(a1)
  1085.  
  1086.     move.w    40(a0),20*4+2(a1)
  1087.     move.w    42(a0),21*4+2(a1)
  1088.     move.w    44(a0),22*4+2(a1)
  1089.     move.w    46(a0),23*4+2(a1)
  1090.     move.w    48(a0),24*4+2(a1)
  1091.     move.w    50(a0),25*4+2(a1)
  1092.     move.w    52(a0),26*4+2(a1)
  1093.     move.w    54(a0),27*4+2(a1)
  1094.     move.w    56(a0),28*4+2(a1)
  1095.     move.w    58(a0),29*4+2(a1)
  1096.  
  1097.     move.w    60(a0),30*4+2(a1)
  1098.     move.w    62(a0),31*4+2(a1)
  1099.  
  1100.     movem.l    (sp)+,d0-d7/a0-a6
  1101.     rts
  1102.  
  1103.     ;colorcyclinghandling of a palette
  1104.  
  1105. palcyc
  1106.     movem.l    d0-d7/a0-a6,-(sp)
  1107.     move.w    #4-1,d7            ;4 cycles
  1108. palcyc.d
  1109.     tst.w    (a3)+            ;delay klaar ?
  1110.     bne.s    palcyc.c
  1111.     
  1112.     moveq.l    #0,d1
  1113.     move.b    pic_cycstr(a2),d1    ;start color
  1114.     lsl.b    #1,d1        ;*2
  1115.  
  1116.     moveq.l    #0,d2
  1117.     move.b    pic_cycend(a2),d2    ;end color
  1118.     lsl.b    #1,d2        ;*2
  1119.  
  1120.     moveq.l    #0,d3
  1121.     move.b    pic_cycadd(a2),d3    ;richting
  1122.  
  1123.     move.l    a4,a0            ;palette pointer
  1124.     move.l    a0,a1
  1125.     add.l    d1,a0            ;startcolor
  1126.     add.l    d2,a1            ;endcolor
  1127.     
  1128.     cmp.b    #1,d3            ;omhoog
  1129.     beq.s    palcyc.up
  1130.     cmp.b    #3,d3            ;omlaag
  1131.     beq.s    palcyc.down
  1132.     bra.s    palcyc.i
  1133.  
  1134. palcyc.up                ;kleuren copieren
  1135.     move.w    (a1),d4            ;laatst color bewaren
  1136. palcyc.f                ;kleuren copieren
  1137.     cmp.l    a0,a1
  1138.     beq.s    palcyc.fa
  1139.     move.w    -(a1),2(a1)
  1140.     bra    palcyc.f
  1141. palcyc.fa
  1142.     move.w    d4,(a1)
  1143.     bra.s    palcyc.g    
  1144.     
  1145. palcyc.down
  1146.     move.w    (a0),d4            ;laatst color bewaren
  1147. palcyc.h                ;kleuren copieren
  1148.     cmp.l    a0,a1
  1149.     beq.s    palcyc.ha
  1150.     move.w    2(a0),(a0)+
  1151.     bra    palcyc.h
  1152. palcyc.ha
  1153.     move.w    d4,(a1)
  1154.  
  1155. palcyc.g
  1156.     move.b    pic_cycspd(a2),-1(a3)    ;delay zetten
  1157.     bra.s    palcyc.i
  1158. palcyc.c
  1159.     sub.w    #1,-2(a3)        ;cycle delay aftellen
  1160. palcyc.i
  1161.     add.l    #4,a2            ;next cycle info
  1162.     dbra    d7,palcyc.d
  1163.  
  1164. palcyc.qb
  1165.     movem.l    (sp)+,d0-d7/a0-a6
  1166.     rts
  1167.  
  1168.  
  1169. ;    SECTION    variabelen,DATA_c
  1170.  
  1171.     cnop    0,2
  1172. curtsk        dc.l    0
  1173. tskpri        dc.l    0
  1174. duplok        dc.l    0
  1175. inttel        dc.l    0
  1176. intdel        dc.l    0
  1177.  
  1178. form        dc.l    0
  1179. ifffil        dc.l    0
  1180. intvbold    dc.l    0
  1181. inttbeold    dc.l    0
  1182. patpos        dc.l    0
  1183. gfxlib        dc.l    0
  1184. doslib        dc.l    0
  1185. wbview      dc.l    0
  1186. mt_data        dc.l    0
  1187. memvid        dc.l    0
  1188. oldcprlist    dc.l    0
  1189. hogscr        dc.l    vew_hgt
  1190.  
  1191. inspos        dc.l    -1
  1192. anispd1        dc.w    1    ;nooit op 0 !
  1193. anispd2        dc.w    1
  1194.  
  1195.         cnop    0,2
  1196. varclr.s            ;start wissen
  1197. oldrot        dc.l    0
  1198. curpic        dc.l    0
  1199. curfrm        dc.l    0
  1200. cycdel1        ds.w    4
  1201. cycdel2        ds.w    4
  1202.  
  1203. rotinf1        dc.w    0
  1204. rotinf2        dc.w    0
  1205.  
  1206. effspd        dc.w    0
  1207. efflop        dc.b    0
  1208. anilop1        dc.b    0
  1209. anilop2        dc.b    0
  1210. anipal1        dc.b    0
  1211. anipal2        dc.b    0
  1212. rotdpl        dc.b    1
  1213. dplctr        dc.b    0
  1214.         cnop    0,2
  1215.  
  1216. insdat        ds.l    4
  1217. inspri        dc.l    0
  1218. instel        dc.w    0
  1219.  
  1220. cureff        dc.l    0
  1221. efftel        dc.w    0
  1222.  
  1223. curpal1        dc.l    0
  1224. curpal2        dc.l    0
  1225. currot1        dc.l    0
  1226. currot2        dc.l    0
  1227. curpic1        dc.l    0
  1228. curpic2        dc.l    0
  1229. anitel1        dc.w    0
  1230. anitel2        dc.w    0
  1231. curfrm1        dc.l    0
  1232. curfrm2        dc.l    0
  1233. oldfrm1        dc.l    0
  1234. oldfrm2        dc.l    0
  1235.  
  1236. varclr.e
  1237.         dc.l    0            ;wisruimte
  1238.     
  1239. varclr.ql    equ    varclr.e-varclr.s    ;wislengte
  1240.     
  1241. ;ownblit    dc.b    0
  1242. ntscmode    dc.b    0
  1243. end        dc.b    0
  1244.  
  1245. pronam    dc.b    'VideoTracker',0
  1246.     cnop    0,2
  1247. dosnam    dc.b    'dos.library',0
  1248.     cnop    0,4
  1249. gfxnam    dc.b    'graphics.library',0
  1250.     cnop    0,4
  1251.     
  1252.     cnop    0,4
  1253. gra.s
  1254. gracprscr
  1255.     dc.w    $8e,$3381,$90,$81c1,$92,$003c,$94,$00d0
  1256. gracprbpl
  1257.     dc.w    $100,$0000,$102,$0000,$104,$0020
  1258.     dc.w    $108,$0000,$10a,$0000
  1259. gracprpln
  1260.     dc.w    $e0,$0000,$e2,$0000
  1261.     dc.w    $e4,$0000,$e6,$0000
  1262.     dc.w    $e8,$0000,$ea,$0000
  1263.     dc.w    $ec,$0000,$ee,$0000
  1264.     dc.w    $f0,$0000,$f2,$0000
  1265.     dc.w    $f4,$0000,$f6,$0000
  1266. gracprcol
  1267.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1268.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1269.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1270.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1271. cprjmp
  1272.     dc.w    $080,0,$082,0
  1273. gra.e
  1274. gra.ql    equ    gra.e-gra.s        ;block lengte
  1275.  
  1276.  
  1277. cpr
  1278.     dc.w    $0001,$fffe
  1279.     dc.w    $09c,$8001        ;tbeint
  1280. cprspr
  1281.     dc.w    $120,$0000,$122,$0000
  1282.     dc.w    $124,$0000,$126,$0000
  1283.     dc.w    $128,$0000,$12a,$0000
  1284.     dc.w    $12c,$0000,$12e,$0000
  1285.     dc.w    $130,$0000,$132,$0000
  1286.     dc.w    $134,$0000,$136,$0000
  1287.     dc.w    $138,$0000,$13a,$0000
  1288.     dc.w    $13c,$0000,$13e,$0000
  1289.  
  1290. cprbuf
  1291.     dc.w    $8e,$3381,$90,$81c1,$92,$003c,$94,$00d0
  1292.     dc.w    $100,$9000,$102,$0000,$104,$0020
  1293.     dc.w    $108,$0000,$10a,$0000
  1294.     dc.w    $e0,$0000,$e2,$0000
  1295.     dc.w    $e4,$0000,$e6,$0000
  1296.     dc.w    $e8,$0000,$ea,$0000
  1297.     dc.w    $ec,$0000,$ee,$0000
  1298.     dc.w    $f0,$0000,$f2,$0000
  1299.     dc.w    $f4,$0000,$f6,$0000
  1300.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1301.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1302.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1303.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1304.     dc.w    $080,0,$082,0
  1305. cprbuf.e
  1306.  
  1307.     dc.w    $088,$0000        ;copjmp2
  1308.     dc.w    $080,0,$082,0        ;moet achter cprbck blijven !
  1309. cprbck
  1310. sprdat
  1311.     dc.w    $ffff,$fffe
  1312.  
  1313.  
  1314. prf_pat    equ    7            ;pref sample size
  1315. prf_patnum    equ    128        ;aantal songpos's
  1316. prf_len    equ    ((prf_pat*prf_patnum)+1)
  1317.  
  1318. prf_pos    equ    0            ;eff position (teller)
  1319.  
  1320. prf_effs    equ    1        ;start effect (*prf_patnum)
  1321. prf_effe    equ    2        ;end effect   (*prf_patnum)
  1322. prf_pri    equ    3            ;priority     (*prf_patnum)
  1323. prf_spd    equ    4            ;eff speed    (*prf_patnum)
  1324. prf_ani    equ    5            ;ani speed    (*prf_patnum)
  1325. prf_roth    equ    6        ;routine info (*prf_patnum)
  1326. prf_rotl    equ    7        ;routine info (*prf_patnum)
  1327.  
  1328. eff_num    equ    256            ;aantal effects
  1329.  
  1330. pic_wid        equ    4        ;wide in bytes
  1331. pic_hgt        equ    6        ;hoogte
  1332. pic_dpt        equ    8        ;number planes
  1333. pic_ani        equ    10        ;aantal effes (anim)
  1334. pic_vew        equ    12        ;viewmode
  1335. pic_cycstr    equ    14        ;cycle start (*4)
  1336. pic_cycend    equ    15        ;cycle end (*4)
  1337. pic_cycspd    equ    16        ;cycle speed (*4)
  1338. pic_cycadd    equ    17        ;cycle add (*4)
  1339. pic_palnum    equ    30        ;aantal kleuren
  1340. pic_pal        equ    32        ;palette start
  1341. pic_palsiz    equ    256*2        ;vaste palette size
  1342. pic_raw        equ    pic_pal+pic_palsiz    ;palette start
  1343.  
  1344. fil_namlen    equ    24        ;naamlengte
  1345. fil_len    equ    (fil_namlen+4+4)    ;effect info length
  1346. fil_num    equ    2+eff_num        ;aantal files
  1347. fil_fil    equ    0            ;file naam 
  1348. fil_dir    equ    24            ;pointer naar directory
  1349. fil_pnt    equ    28            ;pointer naar meminfo
  1350.  
  1351. palette    ds.w    64    ;palette
  1352.  
  1353. var_len        equ    $300        ;lengte vartabel
  1354.  
  1355. var__GfxBase    equ    $000        ;graphics lib
  1356. var_pic1    equ    $004        ;current picture
  1357. var_anispd1    equ    $008        ;animspeed
  1358. var_anitel1    equ    $00c        ;animspeed
  1359. var_cprbck    equ    $010        ;copperback
  1360. var_bck        equ    $014        ;background
  1361. var_pic2    equ    $018        ;current picture
  1362. var_ntsc    equ    $01c        ;ntsc/pal frequence
  1363. var_lnd        equ    $020        ;landscape
  1364. var_txt1    equ    $040        ;text
  1365. var_txt16    equ    15*4+var_txt1
  1366. var_vec1    equ    $080        ;vectors
  1367. var_vec16    equ    15*4+var_vec1
  1368. var_fon1    equ    $0c0        ;fonts
  1369. var_fon16    equ    15*4+var_fon1
  1370. var_cols1    equ    $100        ;colorsets
  1371. var_cols16    equ    15*4+var_cols1
  1372. var_obj1    equ    $180        ;objects
  1373. var_obj16    equ    15*4+var_obj1
  1374.  
  1375.     cnop    0,2
  1376. var    ds.b    $300    ;variabelen voor routines
  1377.  
  1378.     
  1379. ;    SECTION    10,CODE_C
  1380.         endc
  1381.  
  1382. ; this is the routine-source
  1383. ;**********************************************************************
  1384.  
  1385.         ifnd    rout
  1386. pic_wid        equ    4        ;wide in bytes
  1387. pic_hgt        equ    6        ;hoogte
  1388. pic_dpt        equ    8        ;number planes
  1389. pic_ani        equ    10        ;aantal effes (anim)
  1390. pic_vew        equ    12        ;viewmode
  1391. pic_cycstr    equ    14        ;cycle start (*4)
  1392. pic_cycend    equ    15        ;cycle end (*4)
  1393. pic_cycspd    equ    16        ;cycle speed (*4)
  1394. pic_cycadd    equ    17        ;cycle add (*4)
  1395. pic_palnum    equ    30        ;aantal kleuren
  1396. pic_pal        equ    32        ;palette start
  1397. pic_palsiz    equ    256*2        ;vaste palette size
  1398. pic_raw        equ    pic_pal+pic_palsiz    ;palette start
  1399.  
  1400. var_len        equ    $300        ;lengte vartabel
  1401.  
  1402. var__GfxBase    equ    $000        ;graphics lib
  1403. var_pic1    equ    $004        ;current picture
  1404. var_anispd1    equ    $008        ;animspeed
  1405. var_anitel1    equ    $00c        ;animspeed
  1406. var_cprbck    equ    $010        ;copperback
  1407. var_bck        equ    $014        ;background
  1408. var_pic2    equ    $018        ;current picture
  1409. var_ntsc    equ    $01c        ;ntsc/pal frequence
  1410. var_lnd        equ    $020        ;landscape
  1411. var_txt1    equ    $040        ;text
  1412. var_txt16    equ    15*4+var_txt1
  1413. var_vec1    equ    $080        ;vectors
  1414. var_vec16    equ    15*4+var_vec1
  1415. var_fon1    equ    $0c0        ;fonts
  1416. var_fon16    equ    15*4+var_fon1
  1417. var_cols1    equ    $100        ;colorsets
  1418. var_cols16    equ    15*4+var_cols1
  1419. var_obj1    equ    $180        ;objects
  1420. var_obj16    equ    15*4+var_obj1
  1421.  
  1422. vew_wid    equ    44
  1423. vew_hgt    equ    290
  1424. win_hgt    equ    117
  1425. win_str    equ    $20
  1426.         endc
  1427.  
  1428. bit4        ;off= full 8 bit copper, on=48*48 4 bit copper
  1429.  
  1430.         ifd    bit4
  1431. rotpic_y    equ    192
  1432. rotpic_yp    equ    48;/6
  1433. rotpic_x    equ    48
  1434.         endc
  1435.         ifnd    bit4
  1436. rotpic_y    equ    288
  1437. rotpic_yp    equ    36
  1438. rotpic_x    equ    48
  1439.         endc
  1440.  
  1441. ;    Input:
  1442. ;    a0=variabelen tabel
  1443. ;    d0=routinfo
  1444.  
  1445. ;    Output:
  1446. ;    a0=picture
  1447. ;    d1=copperlist
  1448.  
  1449.     SECTION    3,CODE_C
  1450.  
  1451. rot
  1452.     dc.l    'ROUT'
  1453.     movem.l    d2-d7/a1-a6,-(sp)
  1454.  
  1455.     lea    ($dff000).l,a6        ;hardware
  1456.     lea    rot,a5            ;prog base
  1457.  
  1458.     ifnd    bit4
  1459.     sub.l    a1,a1
  1460.     clr.l    d1
  1461.     tst.w    d0
  1462.     beq    rot.c
  1463.     lea    rotpicemp,a1
  1464. rot.c    
  1465.     move.l    a1,rotpicvew-rot(a5)
  1466.     endc
  1467.     
  1468. ;    move.l    #32768,d2
  1469. ;    bsr    getd7
  1470. ;
  1471. ;rot.ea    
  1472. ;    move.l    #4,d2            ;hoogte
  1473. ;    bsr    getd7
  1474. ;    muls    #1380,d7
  1475. ;    move.l    d7,variabele1-rot(a5)
  1476. ;    move.l    #1,d2            ;breedte
  1477. ;    bsr    getd7
  1478. ;    muls    #6,d7
  1479. ;    move.l    d7,variabele7-rot(a5)
  1480.  
  1481. rot.end
  1482.     bsr    rotint            ;eventueel init
  1483.  
  1484.     move.l    var_cprbck(a0),d1
  1485.     sub.l    #8,d1
  1486.  
  1487.     lea    rotcop1,a1        ;copperjump adres zetten
  1488.     move.l    rotbuf-rot(a5),d2    ;double buffer
  1489.     add.l    d2,a1
  1490.  
  1491.     move.w    d1,6(a1)
  1492.     swap    d1
  1493.     move.w    d1,2(a1)
  1494.  
  1495.     ifnd    bit4
  1496.     move.l    a1,a2
  1497.     add.l    #rotcprbck1ntsc,a2
  1498.     move.l    a1,a3
  1499.     add.l    #rotcprend1ntsc,a3
  1500.     move.l    a1,a4
  1501.     add.l    #rotcprbck1,a4
  1502.  
  1503.     cmp.b    #50,var_ntsc(a0)    ;ntsc/pal frequence
  1504.     bne    rot.ntsc
  1505.     move.l    #$8429fffe,(a2)        ;reset ntsc split (cprbck1ntsc)
  1506.     move.l    #$fc29fffe,(a3)        ;reset ntsc end (cprend1ntsc)
  1507.     add.l    #rotcprbck1,a1
  1508.     move.l    #$bc29fffe,d0        ;pal split (cprbck1)
  1509.     bra    rot.split
  1510. rot.ntsc
  1511.     move.l    #$bc29fffe,(a4)        ;reset pal split (cprbck1)
  1512.     move.l    #$00880000,(a3)        ;set ntsc end (cprend1ntsc)
  1513.     add.l    #rotcprbck1ntsc,a1
  1514.     move.l    #$8429fffe,d0        ;(cprbck1ntsc)
  1515. rot.split
  1516.     move.l    #$00880000,(a1)        ;set break
  1517.     move.l    var_cprbck(a0),a2
  1518.     cmp.b    #$ff,(a2)        ;menu uit ?
  1519.     bne    rot.a
  1520.     move.l    d0,(a1)
  1521. rot.a
  1522.     endc
  1523.  
  1524.     ifd    bit4
  1525.  
  1526.     move.l    a1,a2
  1527.     add.l    #rotcprbck1ntsc,a2
  1528. ;    move.l    a1,a3
  1529. ;    add.l    #rotcprend1ntsc,a3
  1530.     move.l    a1,a4
  1531.     add.l    #rotcprbck1,a4
  1532.  
  1533.     cmp.b    #50,var_ntsc(a0)    ;ntsc/pal frequence
  1534.     bne    rot.ntsc
  1535.     move.l    #$84c9fffe,(a2)        ;reset ntsc split (cprbck1ntsc)
  1536. ;    move.l    #$fcc9fffe,(a3)        ;reset ntsc end (cprend1ntsc)
  1537.     add.l    #rotcprbck1,a1
  1538.     move.l    #$bcc9fffe,d0        ;pal split (cprbck1)
  1539.     bra    rot.split
  1540. rot.ntsc
  1541.     move.l    #$a0c9fffe,(a4)        ;reset pal split (cprbck1)
  1542. ;    move.l    #$00880000,(a3)        ;set ntsc end (cprend1ntsc)
  1543.     add.l    #rotcprbck1ntsc,a1
  1544.     move.l    #$84c9fffe,d0        ;(cprbck1ntsc)
  1545. rot.split
  1546.     move.l    #$00880000,(a1)        ;set break
  1547.     move.l    var_cprbck(a0),a2
  1548.     cmp.b    #$ff,(a2)        ;menu uit ?
  1549.     bne    rot.a
  1550.     move.l    d0,(a1)
  1551. rot.a
  1552.     endc
  1553.     
  1554.     bsr    rotlop
  1555.  
  1556.     lea    rotcop1,a0
  1557.     move.l    rotbuf-rot(a5),d1
  1558.     add.l    a0,d1
  1559.     eor.l    #rotcop_l,rotbuf-rot(a5)
  1560.  
  1561.     ifnd    bit4
  1562.     move.l    rotpicvew-rot(a5),a0
  1563.     endc
  1564.     
  1565.     ifd    bit4
  1566.     lea    rotpic,a0        ;picture
  1567.     endc
  1568.     movem.l    (sp)+,d2-d7/a1-a6
  1569.     rts
  1570.  
  1571. getd7
  1572.     move.w    d0,d1
  1573.     divs    d2,d1
  1574.     and.l    #$ffff,d1
  1575.     move.l    d1,d7
  1576.     muls    d2,d1
  1577.     sub.w    d1,d0
  1578.     move.l    d0,d6
  1579.     add.l    #1,d7
  1580.     rts
  1581.  
  1582. rotint
  1583.     movem.l    d0-d7/a0-a6,-(sp)
  1584.  
  1585.     lea    rotcoptus.s,a2
  1586.  
  1587.     ifd    bit4
  1588.     move.l    rotcopstr-rot(a5),d0    ;pal start
  1589.     cmp.b    #50,var_ntsc(a0)    ;ntsc/pal frequence
  1590.     bne    rotint.ntsc
  1591.     move.l    #$4a,rotcopstr-rot(a5)    ;pal start
  1592.     bra    rotint.split
  1593. rotint.ntsc
  1594.     move.l    #$2e,rotcopstr-rot(a5)    ;ntsc start
  1595. rotint.split
  1596.     cmp.l    rotcopstr-rot(a5),d0    ;veranderd ?
  1597.     bne    rotint.changed
  1598.     endc
  1599.  
  1600.     tst.b    (a2)            ;already filled ?
  1601.     bne    rotint.nocop
  1602.  
  1603. rotint.changed
  1604.     move.l    rotcopstr-rot(a5),d1    ;copper y position
  1605.     
  1606.     move.w    #rotpic_y-1,d0        ;number of copperlines
  1607. rotint.a
  1608.     move.b    d1,(a2)
  1609.     add.w    #1,d1
  1610.     add.l    #rotcoptus_l,a2
  1611.     dbra    d0,rotint.a
  1612.     
  1613.     lea    rotcop1,a2        ;copy copper1 to copper2
  1614.     move.l    a2,a1
  1615.     add.l    #rotcop_l,a1
  1616.     move.w    #rotcop_l/4-1,d0
  1617. rotint.bb
  1618.     move.l    (a2)+,(a1)+
  1619.     dbra    d0,rotint.bb
  1620.  
  1621. rotint.nocop
  1622.     move.l    var_pic1(a0),a1        ;picture
  1623.     cmp.l    #0,a1            ;empty ?
  1624.     beq    rotint.nopic
  1625.  
  1626.     cmp.l    rotbck-rot(a5),a1    ;already on screen ?
  1627.     beq    rotint.nopic
  1628.  
  1629.     move.w    pic_vew(a1),d0
  1630.     btst    #11,d0            ;hold and modify ?
  1631.     beq    rotint.nopic
  1632.  
  1633.     clr.l    d0
  1634.     move.w    pic_wid(a1),d0        ;get width
  1635.     lsl.l    #3,d0            ;*8 for pixelnumber
  1636.     sub.w    #16,d0
  1637.     cmp.w    #256,d0            ;bigger than buffer ?
  1638.     bgt    rotint.nopic
  1639.  
  1640.     clr.l    d1
  1641.     move.w    pic_hgt(a1),d1        ;heigth
  1642.     cmp.w    #256,d1            ;bigger than buffer ?
  1643.     bgt    rotint.nopic
  1644.     muls    d1,d0            ;* heigth
  1645.     lsl.l    #1,d0            ;*2 for words
  1646.  
  1647.     cmp.l    #rotcol_l,d0        ;bigger than buffer ?
  1648.     bgt    rotint.nopic
  1649.  
  1650.     move.l    a1,rotbck-rot(a5)
  1651.  
  1652.     move.l    a5,a4
  1653.     add.l    #rotcol-rot,a4        ;start colorbuffer
  1654.     
  1655.     clr.l    d0
  1656.     move.w    pic_wid(a1),d0        ;get width
  1657.  
  1658.     lea    pic_raw(a1),a2        ;start raw planes
  1659.  
  1660.     clr.l    d3            ;colorvalue
  1661.     clr.l    d1            ;y start position
  1662. rotint.f
  1663.     clr.l    d6            ;x start position
  1664. rotint.d
  1665.  
  1666.     move.l    #8-1,d7            ;read bits of 1 byte
  1667. rotint.c
  1668.     clr.l    d4            ;colorbits
  1669.     clr.l    d5            ;colorinfo
  1670.  
  1671.     btst    d7,(a2)            ;get colorbits
  1672.     beq    rotint.c0    
  1673.     bset    #0,d4
  1674. rotint.c0    
  1675.     add.l    d0,a2
  1676.     btst    d7,(a2)
  1677.     beq    rotint.c1    
  1678.     bset    #1,d4
  1679. rotint.c1    
  1680.     add.l    d0,a2
  1681.     btst    d7,(a2)
  1682.     beq    rotint.c2
  1683.     bset    #2,d4
  1684. rotint.c2
  1685.     add.l    d0,a2
  1686.     btst    d7,(a2)
  1687.     beq    rotint.c3
  1688.     bset    #3,d4
  1689. rotint.c3
  1690.  
  1691.     add.l    d0,a2            ;get colorinfo
  1692.     btst    d7,(a2)
  1693.     beq    rotint.c4
  1694.     bset    #0,d5
  1695. rotint.c4
  1696.     add.l    d0,a2
  1697.     btst    d7,(a2)
  1698.     beq    rotint.c5
  1699.     bset    #1,d5
  1700. rotint.c5
  1701.  
  1702.     rept    5
  1703.     sub.l    d0,a2
  1704.     endr
  1705.  
  1706.     tst.b    d5            ;true color ?
  1707.     bne    rotint.c00
  1708.     lea    pic_pal(a1),a3        ;palette
  1709.     lsl.l    #1,d4
  1710.     move.w    (a3,d4),d3
  1711.     bra    rotint.e
  1712. rotint.c00
  1713.     cmp.b    #1,d5            ;blue bits ?
  1714.     bne    rotint.c01
  1715.     and.w    #$ff0,d3        ;remove old bits
  1716.     or.w    d4,d3            ;set new bits
  1717.     bra    rotint.e
  1718. rotint.c01
  1719.     cmp.b    #2,d5            ;red bits ?
  1720.     bne    rotint.c02
  1721.     and.w    #$0ff,d3        ;remove old bits
  1722.     lsl.w    #8,d4
  1723.     or.w    d4,d3            ;set new bits
  1724.     bra    rotint.e
  1725. rotint.c02
  1726.     cmp.b    #3,d5            ;green bits ?
  1727.     bne    rotint.c03
  1728.     and.w    #$f0f,d3        ;remove old bits
  1729.     lsl.w    #4,d4
  1730.     or.w    d4,d3            ;set new bits
  1731.     bra    rotint.e
  1732. rotint.c03
  1733.  
  1734. rotint.e
  1735.     move.l    d1,d5            ;y pos
  1736.     lsl.l    #8,d5            ;*256 (width)
  1737.     lsl.l    #1,d5            ;make words
  1738.  
  1739.     move.l    d6,d4            ;x byte pos    
  1740.     lsl.l    #3,d4            ;make pixels
  1741.     add.l    #7,d4            ;x bit pos
  1742.     sub.l    d7,d4
  1743.     lsl.l    #1,d4            ;make words
  1744.  
  1745. rotint.g
  1746.     clr.l    d2
  1747.     move.w    pic_wid(a1),d2
  1748.     sub.l    #2,d2            ;dpaint ?
  1749.     lsl.l    #4,d2            ;make pixels and words
  1750.     
  1751.     move.l    d4,-(sp)
  1752. rotint.eb
  1753.     move.l    a4,a6
  1754.     add.l    d5,a6            ;x,y start
  1755.     add.l    d4,a6            ;x add
  1756.     move.w    d3,(a6)
  1757.     add.l    d2,d4
  1758.     cmp.l    #256*2,d4        ;reached border ?
  1759.     blt    rotint.eb
  1760.     move.l    (sp)+,d4
  1761.  
  1762.     clr.l    d2
  1763.     move.w    pic_hgt(a1),d2
  1764.     lsl.l    #8,d2            ;* total width (256)
  1765.     lsl.l    #1,d2            ;make words
  1766.  
  1767.     add.l    d2,d5
  1768.     cmp.l    #rotcol_l,d5        ;reached border ?
  1769.     blt    rotint.g
  1770.  
  1771. rotint.ge
  1772.     dbra    d7,rotint.c
  1773.  
  1774.     add.l    #1,a2            ;next byte
  1775.  
  1776.     add.l    #1,d6
  1777.     clr.l    d2
  1778.     move.w    pic_wid(a1),d2
  1779.     sub.l    #2,d2            ;dpaint ?
  1780.     cmp.l    d2,d6
  1781.     bne    rotint.d
  1782.     add.l    #2,a2            ;dpaint ?
  1783.  
  1784.     rept    5
  1785.     add.l    d0,a2
  1786.     endr
  1787.  
  1788.     add.l    #1,d1
  1789.     cmp.w    pic_hgt(a1),d1        ;y-end reached ?
  1790.     bne    rotint.f
  1791.     
  1792. rotint.nopic
  1793.  
  1794. rotint.end    
  1795.     movem.l    (sp)+,d0-d7/a0-a6
  1796.     rts
  1797.  
  1798. rotlop
  1799.     movem.l    d0-d7/a0-a6,-(sp)
  1800.  
  1801.     tst.l    rotbck-rot(a5)        ;picture available ?
  1802.     beq    rotlop.end
  1803.  
  1804.     lea    rotcoptus.s,a1        ;get copperlist
  1805.     add.l    rotbuf-rot(a5),a1
  1806.  
  1807.     move.l    a5,a4            ;get colortable
  1808.     add.l    #rotcol-rot,a4
  1809.  
  1810.     move.l    #32,d0            ;x centre
  1811.     lsl.l    #3,d0            ;make pixel-width
  1812.     move.l    d0,d1
  1813.     move.l    rotmag-rot(a5),d4
  1814.     muls    #rotpic_x,d4
  1815.     lsr.l    #8,d4            ;/256
  1816.     sub.l    d4,d0
  1817.     lsr.l    #1,d0            ;/2
  1818.     lsl.l    #1,d0            ;make words
  1819.     add.l    d0,a4            ;(words)
  1820.  
  1821.     move.l    #256,d0            ;y centre
  1822.     sub.l    d4,d0
  1823.     lsr.l    #1,d0            ;/2
  1824.     muls    d1,d0            ;*width
  1825.     lsl.l    #1,d0            ;words
  1826.     add.l    d0,a4            ;(words)
  1827.  
  1828.     move.l    rotmag-rot(a5),a3    ;x-magnify add
  1829.     move.l    rotrot-rot(a5),a0    ;x-rotation add
  1830.     move.l    a4,a2
  1831.  
  1832.     clr.l    d1            ;y-pos magnify
  1833.     clr.l    d0            ;y-pos rotate
  1834.  
  1835.     move.w    #rotpic_yp-1,d7
  1836. rotlop.a
  1837.     moveq.w    #0,d3            ;x-pos magnify
  1838.     moveq.w    #0,d2            ;x-pos rotate
  1839.  
  1840.     rept    rotpic_x        ;x-repeat
  1841.     
  1842.     move.w    d2,d5
  1843.     clr.b    d5
  1844.     lsl.w    #1,d5
  1845.     
  1846.     move.w    d3,d4
  1847.     lsr.w    #8,d4            ;/256
  1848.     lsl.w    #1,d4            ;words
  1849.     add.w    d5,d4
  1850.     
  1851.     move.w    (a4,d4),d4
  1852.     move.w    d4,6(a1)        ;fill 4 copperrows
  1853.     move.w    d4,rotcoptus_l+6(a1)
  1854.     move.w    d4,2*rotcoptus_l+6(a1)
  1855.     move.w    d4,3*rotcoptus_l+6(a1)
  1856.  
  1857.     ifnd    bit4
  1858.     move.w    d4,4*rotcoptus_l+6(a1)
  1859.     move.w    d4,5*rotcoptus_l+6(a1)
  1860.     move.w    d4,6*rotcoptus_l+6(a1)
  1861.     move.w    d4,7*rotcoptus_l+6(a1)
  1862.     endc
  1863.  
  1864.     add.w    a0,d2            ;x-rotation add
  1865.     add.w    a3,d3            ;x-magnify add
  1866.     lea    4(a1),a1
  1867.  
  1868.     endr                ;end x-repeat
  1869.  
  1870.     ifd    bit4
  1871.     add.l    #rotcoptus_l*3+4,a1    ;next 4 copperlines
  1872.     endc
  1873.     ifnd    bit4
  1874.     add.l    #rotcoptus_l*7+4,a1    ;next 4 copperlines
  1875.     endc
  1876.     
  1877.     add.l    rotrot-rot(a5),d0    ;y-rotate add
  1878.     move.l    d0,d6
  1879.     lsr.l    #8,d6            ;/256
  1880.     lsl.l    #1,d6            ;words
  1881.  
  1882.     add.l    rotmag-rot(a5),d1    ;y-magnify add
  1883.     move.l    d1,d5
  1884.     clr.b    d5
  1885.     lsl.l    #1,d5
  1886.  
  1887.     sub.l    d6,d5            ;-rotate
  1888.  
  1889.     move.l    a2,a4
  1890.     add.l    d5,a4
  1891.     dbra    d7,rotlop.a
  1892.  
  1893. rotlop.ca
  1894.     move.l    rotmagpos-rot(a5),d0
  1895.     move.l    rotmagway-rot(a5),d1
  1896.     add.l    d1,d0
  1897.     cmp.l    #rotmagtab_l,d0
  1898.     blt    rotlop.cc
  1899.     neg.l    rotmagway-rot(a5)
  1900.     bra    rotlop.ca
  1901. rotlop.cc
  1902.     cmp.l    #0,d0
  1903.     bge    rotlop.cb
  1904.     neg.l    rotmagway-rot(a5)
  1905.     bra    rotlop.ca
  1906. rotlop.cb
  1907.     move.l    d0,rotmagpos-rot(a5)
  1908.  
  1909.     lea    rotmagtab,a1
  1910.     move.w    (a1,d0),d0
  1911.     ext.l    d0
  1912.     move.l    d0,rotmag-rot(a5)
  1913.  
  1914.  
  1915. rotlop.ca2
  1916.     move.l    rotrotpos-rot(a5),d0
  1917.     move.l    rotrotway-rot(a5),d1
  1918.     add.l    d1,d0
  1919.     cmp.l    #rotrottab_l,d0
  1920.     blt    rotlop.cc2
  1921.     neg.l    rotrotway-rot(a5)
  1922.     bra    rotlop.ca2
  1923. rotlop.cc2
  1924.     cmp.l    #0,d0
  1925.     bge    rotlop.cb2
  1926.     neg.l    rotrotway-rot(a5)
  1927.     bra    rotlop.ca2
  1928. rotlop.cb2
  1929.     move.l    d0,rotrotpos-rot(a5)
  1930.  
  1931.     lea    rotrottab,a1
  1932.     move.w    (a1,d0),d0
  1933.     ext.l    d0
  1934.     move.l    d0,rotrot-rot(a5)
  1935.  
  1936.  
  1937. rotlop.end
  1938.     movem.l    (sp)+,d0-d7/a0-a6
  1939.     rts
  1940.  
  1941. rotbuf        dc.l    0
  1942. rotbck        dc.l    0
  1943. rotpicvew    dc.l    0
  1944. rotmag        dc.l    0
  1945. rotmagpos    dc.l    0
  1946. rotmagway    dc.l    4
  1947. rotrot        dc.l    0
  1948. rotrotpos    dc.l    0
  1949. rotrotway    dc.l    18
  1950.  
  1951.         ifd    bit4
  1952. rotcopstr    dc.l    $4a
  1953.         endc
  1954.         ifnd    bit4
  1955. rotcopstr    dc.l    $18
  1956.         endc
  1957.         
  1958.  
  1959. rotmagtab
  1960.        dc.w       1100,1081,1062,1042,1023,1004,985,966,947,928,909,890
  1961.        dc.w       871,853,834,815,797,778,760,742,724,706,688,670
  1962.        dc.w       653,635,618,601,584,567,550,533,517,501,485,469
  1963.        dc.w       453,438,423,408,393,378,364,350,336,322,309,296
  1964.        dc.w       283,270,257,245,233,222,210,199,188,177,167,157
  1965.        dc.w       147,138,129,120,111,103,95,87,80,73,66,60
  1966.        dc.w       54,48,43,37,33,28,24,20,17,14,11,8
  1967.        dc.w       6,4,3,2,1,0,0
  1968.  
  1969.  
  1970.        dc.w       0,0,0,0,-1,-2,-2,-4,-5,-6,-8,-9
  1971.        dc.w       -11,-13,-16,-18,-20,-23,-26,-29,-32,-36,-39,-43
  1972.        dc.w       -46,-50,-55,-59,-63,-68,-73,-77,-82,-88,-93,-99
  1973.        dc.w       -104,-110,-116,-122,-128,-135,-141,-148,-155,-162,-169,-176
  1974.        dc.w       -183,-191,-198,-206,-214,-222,-230,-239,-247,-256,-264,-273
  1975.        dc.w       -282,-291,-300,-310,-319,-328,-338,-348,-358,-368,-378,-388
  1976.        dc.w       -398,-409,-419,-430,-441,-451,-462,-473,-484,-496,-507,-518
  1977.        dc.w       -530,-541,-553,-565,-576,-588,-600,-612,-624,-636,-649,-661
  1978.        dc.w       -673,-686,-698,-711,-723,-736,-749,-761,-774,-787,-800,-813
  1979.        dc.w       -826,-839,-852,-865,-878,-891,-905,-918,-931,-945,-958,-971
  1980.        dc.w       -985,-998,-1011,-1025,-1038,-1052,-1065,-1078,-1092
  1981.  
  1982. rotmagtab.e
  1983. rotmagtab_l    equ    rotmagtab.e-rotmagtab
  1984.  
  1985. rotrottab
  1986.        dc.w       128,128,128,128,128,128,128,128,127,127,127,127
  1987.        dc.w       127,126,126,126,126,125,125,125,124,124,123,123
  1988.        dc.w       123,122,122,121,121,120,119,119,118,118,117,116
  1989.        dc.w       116,115,114,114,113,112,112,111,110,109,108,107
  1990.        dc.w       107,106,105,104,103,102,101,100,99,98,97,96
  1991.        dc.w       95,94,93,92,91,90,89,87,86,85,84,83
  1992.        dc.w       82,80,79,78,77,75,74,73,72,70,69,68
  1993.        dc.w       66,65,64,62,61,60,58,57,55,54,52,51
  1994.        dc.w       50,48,47,45,44,42,41,39,38,36,35,33
  1995.        dc.w       32,30,29,27,26,24,23,21,20,18,16,15
  1996.        dc.w       13,12,10,9,7,6,4,2,1,0,-2,-3
  1997.        dc.w       -5,-6,-8,-10,-11,-13,-14,-16,-17,-19,-20,-22
  1998.        dc.w       -23,-25,-27,-28,-30,-31,-33,-34,-36,-37,-39,-40
  1999.        dc.w       -42,-43,-45,-46,-47,-49,-50,-52,-53,-55,-56,-57
  2000.        dc.w       -59,-60,-62,-63,-64,-66,-67,-68,-70,-71,-72,-73
  2001.        dc.w       -75,-76,-77,-78,-80,-81,-82,-83,-84,-86,-87,-88
  2002.        dc.w       -89,-90,-91,-92,-93,-94,-96,-97,-98,-99,-100,-101
  2003.        dc.w       -101,-102,-103,-104,-105,-106,-107,-108,-109,-109,-110,-111
  2004.        dc.w       -112,-112,-113,-114,-115,-115,-116,-117,-117,-118,-118,-119
  2005.        dc.w       -119,-120,-121,-121,-122,-122,-122,-123,-123,-124,-124,-124
  2006.        dc.w       -125,-125,-125,-126,-126,-126,-126,-127,-127,-127,-127,-127
  2007.        dc.w       -127,-127,-127,-127,-127,-127
  2008.  
  2009. rotrottab.e
  2010. rotrottab_l    equ    rotrottab.e-rotrottab
  2011.  
  2012.  
  2013.     ifnd    bit4
  2014. ;pic_wid        equ    4        ;wide in bytes
  2015. ;pic_hgt        equ    6        ;hoogte
  2016. ;pic_dpt        equ    8        ;number planes
  2017. ;pic_ani        equ    10        ;aantal effes (anim)
  2018. ;pic_vew        equ    12        ;viewmode
  2019. ;pic_cycstr        equ    14        ;cycle start (*4)
  2020. ;pic_cycend        equ    15        ;cycle end (*4)
  2021. ;pic_cycspd        equ    16        ;cycle speed (*4)
  2022. ;pic_cycadd        equ    17        ;cycle add (*4)
  2023. ;pic_palnum        equ    30        ;aantal kleuren
  2024. ;pic_pal        equ    32        ;palette start
  2025. ;pic_palsiz        equ    256*2        ;vaste palette size
  2026. ;pic_raw        equ    pic_pal+pic_palsiz    ;palette start
  2027.  
  2028. rotpicemp
  2029.     dc.l    'PICT'
  2030.     dc.w    4,16,1,1,0
  2031.     dcb.b    4*4
  2032.     dc.w    0
  2033.     ds.w    256
  2034.     ds.b    4*16*1
  2035.     endc
  2036.     
  2037.  
  2038.     ifd    bit4
  2039. rotpic
  2040.     incbin    'videotracker:bin/copmag.bin'
  2041.     cnop    0,2
  2042.     endc
  2043.  
  2044. rotcop1
  2045. rotcprjmp
  2046.     dc.w    $80,0,$82,0
  2047. rotcoptus.s
  2048.  
  2049.     ifd    bit4
  2050.     dc.w    $00c9,$fffe
  2051.     dc.w    $1be,$000,$1bc,$000,$1ba,$000,$1b8,$000
  2052.     dc.w    $1b6,$000,$1b4,$000,$1b2,$000,$1b0,$000
  2053.     dc.w    $1ae,$000,$1ac,$000,$1aa,$000,$1a8,$000
  2054.     dc.w    $1a6,$000,$1a4,$000,$1a2,$000,$1a0,$000
  2055.     dc.w    $19e,$000,$19c,$000,$19a,$000,$198,$000
  2056.     dc.w    $196,$000,$194,$000,$192,$000,$190,$000
  2057.     dc.w    $18e,$000,$18c,$000,$18a,$000,$188,$000
  2058.     dc.w    $186,$000,$184,$000,$182,$000
  2059.     dc.w    $1be,$000,$1bc,$000,$1ba,$000,$1b8,$000
  2060.     dc.w    $1b6,$000,$1b4,$000,$1b2,$000,$1b0,$000
  2061.     dc.w    $1ae,$000,$1ac,$000,$1aa,$000,$1a8,$000
  2062.     dc.w    $1a6,$000,$1a4,$000,$1a2,$000,$1a0,$000
  2063.     dc.w    $19e,$000
  2064.     endc
  2065.  
  2066.     ifnd    bit4
  2067.     dc.w    $0029,$fffe
  2068.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2069.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2070.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2071.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2072.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2073.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2074.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2075.     dc.w    $180,$000,$180,$000,$180,$000
  2076.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2077.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2078.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2079.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2080.     dc.w    $180,$000
  2081.     endc
  2082.  
  2083. rotcoptus.e
  2084.  
  2085.     ifd    bit4
  2086.     rept    rotpic_y-1
  2087.     dc.w    $00c9,$fffe
  2088.     dc.w    $1be,$000,$1bc,$000,$1ba,$000,$1b8,$000
  2089.     dc.w    $1b6,$000,$1b4,$000,$1b2,$000,$1b0,$000
  2090.     dc.w    $1ae,$000,$1ac,$000,$1aa,$000,$1a8,$000
  2091.     dc.w    $1a6,$000,$1a4,$000,$1a2,$000,$1a0,$000
  2092.     dc.w    $19e,$000,$19c,$000,$19a,$000,$198,$000
  2093.     dc.w    $196,$000,$194,$000,$192,$000,$190,$000
  2094.     dc.w    $18e,$000,$18c,$000,$18a,$000,$188,$000
  2095.     dc.w    $186,$000,$184,$000,$182,$000
  2096.     dc.w    $1be,$000,$1bc,$000,$1ba,$000,$1b8,$000
  2097.     dc.w    $1b6,$000,$1b4,$000,$1b2,$000,$1b0,$000
  2098.     dc.w    $1ae,$000,$1ac,$000,$1aa,$000,$1a8,$000
  2099.     dc.w    $1a6,$000,$1a4,$000,$1a2,$000,$1a0,$000
  2100.     dc.w    $19e,$000
  2101.     endr
  2102.     endc
  2103.  
  2104.     ifnd    bit4
  2105.     rept    rotpic_y-1
  2106.     dc.w    $0029,$fffe
  2107.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2108.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2109.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2110.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2111.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2112.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2113.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2114.     dc.w    $180,$000,$180,$000,$180,$000
  2115.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2116.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2117.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2118.     dc.w    $180,$000,$180,$000,$180,$000,$180,$000
  2119.     dc.w    $180,$000
  2120.     endr
  2121.     endc
  2122.  
  2123.         
  2124.     dc.w    $180,$000,$88,0
  2125.  
  2126. rotcoptus_l    equ    rotcoptus.e-rotcoptus.s
  2127.  
  2128.     ifnd    bit4
  2129. rotcprbck1        equ    (rotcoptus_l*164)+8
  2130. rotcprend1        equ    (rotcoptus_l*rotpic_y)+8
  2131. rotcprbck1ntsc        equ    (rotcoptus_l*108)+8
  2132. rotcprend1ntsc        equ    (rotcoptus_l*(rotpic_y-60))+8
  2133.     endc
  2134.  
  2135.     ifd    bit4
  2136. rotcprbck1        equ    (rotcoptus_l*114)+8
  2137. ;rotcprend1        equ    (rotcoptus_l*rotpic_y)+8
  2138. rotcprbck1ntsc        equ    (rotcoptus_l*86)+8
  2139. ;rotcprend1ntsc        equ    (rotcoptus_l*rotpic_y)+8
  2140.     endc
  2141.  
  2142.     cnop    0,2
  2143.  
  2144. rotcop2
  2145.     ds.b    rotcop2-rotcop1
  2146. rotcop2.e
  2147.  
  2148. rotcop_l    equ    rotcop2-rotcop1
  2149.  
  2150.  
  2151. rotcol        ds.w    256*256
  2152. rotcol.e
  2153. rotcol_l    equ    rotcol.e-rotcol
  2154.  
  2155.  
  2156. rot.e
  2157.  
  2158. ;**********************************************************************
  2159.  
  2160.     ifd    rout
  2161. rotsrc
  2162.     incbin    'videotracker:effect/diamondrgb_ham.bru'
  2163. ;    incbin    'videotracker:effect/borisgirl_ham.bru'
  2164.     cnop    0,2
  2165.     endc
  2166.